﻿#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

    //int main()
    //{
    //    float a;
    //    int n;
    //    scanf("%f", &a);
    //    n = (int)a;
    //    printf("%d\n", n);
    //    if (a >= 0) {

    //        if (a - 1 < n - 0.5)
    //        {
    //            n = (int)a;
    //            printf("%d", n);
    //        }
    //        else if (a - 1 >= n - 0.5)
    //        {
    //            n = (int)a + 1;
    //            printf("%d", n);
    //        }
    //    }
    //    if (a < 0)
    //    {
    //        if (a + 1 >= n + 0.5)
    //        {
    //            n = (int)a;
    //            printf("%d", n);
    //        }
    //        else if (a + 1 < n + 0.5)
    //        {
    //            n = (int)a - 1;
    //            printf("%d", n);
    //        }
    //    }
    //    return 0;
    //}


    //int main()
    //{
    //    int arr1[] = { 1,2,3,4,5 };
    //    int arr2[] = { 2,3,4,5,6 };
    //    int arr3[] = { 3,4,5,6,7 };
    //    //数组名是数组⾸元素的地址，类型是int*的，就可以存放在parr数组中
    //    int* parr[3] = { arr1, arr2, arr3 };
    //    int i = 0;
    //    int j = 0;
    //    for (i = 0; i < 3; i++)
    //    {
    //        for (j = 0; j < 5; j++)
    //        {
    //            printf("%d ", parr[i][j]); 
    //        }
    //        printf("\n");
    //    }
    //    return 0;
    //}

    //int main()
    //{
    //    char ch = 'w';
    //    char* pc = &ch;
    //    *pc = 'w';
    //    return 0;
    //}

    //int main()
    //{
    //    const char* pstr = "hello bit.";//这⾥是把⼀个字符串放到pstr指针变量⾥了吗？
    //    printf("%s\n", pstr);
    //    return 0;
    //}
//
//int main()
//{
// char str1[] = "hello bit.";
// char str2[] = "hello bit.";
// const char *str3 = "hello bit.";
// const char *str4 = "hello bit.";
// if(str1 ==str2)
// printf("str1 and str2 are same\n");
// else
// printf("str1 and str2 are not same\n");
// 
// if(str3 ==str4)
// printf("str3 and str4 are same\n");
// else
// printf("str3 and str4 are not same\n");
// 
// return 0;
//}


//int main()
//{
//    char arr[5];
//    char (*p)[5] = &arr;//p 是数组指针
//    //char (*)[5]是数组指针类型
//
//    //char* arr[5];
//    //char* (*p)[5] = &arr；
//
//   

//
//int main()
//{
//    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//    int (*p)[10] = &arr;
//    int i = 0;
//    int sz = sizeof(arr) / sizeof(arr[0]);
//    for (i = 0; i < sz; i++)
//    {
//        printf("%d ", (*p)[i]);//(*p)[i]=(*&arr)[i]=arr[i]
//
//    }
//
//
//    return 0;
//}

//void test(int (*p)[5], int r, int c)
// {
//    int i = 0;
//    int j = 0;
//    for (i = 0; i < r; i++)
//    {
//        for (j = 0; j < c; j++)
//        {
//            printf("%d ", *(*(p + i) + j));//=*(*(p+i)+j))
//        }
//        printf("\n");
//    }
//}
//int main()
//{
//    int arr[3][5] = { {1,2,3,4,5}, {2,3,4,5,6},{3,4,5,6,7} };
//    test(arr, 3, 5);
//    return 0;
//}

//int Add(int x, int y)
//{
//    return x + y;
//}
//int main()
//{
//    int(*pf3)(int, int) = Add;//Add=&Add
//
//    printf("%d\n", (*pf3)(2, 3));
//    printf("%d\n", pf3(3, 5));
//    printf("%d\n", Add(3, 5));
//    return 0;
//}



//int main()
//{
//    (*(void(*)())0)();//函数调用
//    //1.将0强制类型转换成void（*）（)类型的函数指针
//    //2.调用0地址处放的这个函数
//
//    return 0;
//
//}


//函数声明
//声明的函数的名字叫：signal
//第二个参数的类型是void（*）（int）的函数指针类型,该指针可以指向一个函数，指向的函数参数是int，返回类型是void
//singal函数的返回类型是 void(*)(int）的函数指针，该指针可以指向一个函数，指向的函数参数是int，返回类型是 void
//void(*singal(int, void(*)(int)))(int);
//
//
//int main()
//{
//    return 0;
//
//}
// 
// 
// 
// 
// 
// 
// 
// 
//   
//typedef unsigned int uint;
//将unsigned int 重命名为uint

typedef int(*parr_t)[5]; //新的类型名必须在*的右边  等价于int (*)[5]

typedef void(*pfun_t)(int);//新的类型名必须在*的右边

int main()
{
    int arr[5] = { 0 };
    int (*p)[5] = &arr;//p是数组指针变量，p是变量的名字
    //int (*)[5]---数组指针类型
    parr_t p2 = &arr;
    return 0;
}

void(*singal(int, void(*)(int)))(int);//二者相等
//简化代码
typedef void (*pf_t)(int);
pf_t signal2(int, pf_t);




typedef int* ptr_t;
#define PTR_T int*

int main()
{
    //par_t p1;//p1是整形指针
    //PTR_T p2;//p2是整形指针
    ptr_t p1, p2;//p1,p2是整形指针
    PTR_T p3, p4;//int *p3,p4   这里p4是整整型 p3是指针
    return 0;

}